#include "piece.h"
#include <QString>

Piece::Piece(Cell *cell, QString color, QWidget *parent): QWidget(parent), cell(cell){
    setFixedSize(64, 64);
    this->color = color;
    this->state.x = cell->getCoordX();
    this->state.y = cell->getCoordY();
    repaint();
}

void Piece::loadPieceImage(QString name)
{
    QPalette palette;
    QPixmap image(":/pieces/" + name + ".png");
    palette.setBrush(QPalette::Background, image.scaled(64, 64));
    this->setAutoFillBackground(true);
    this->setPalette(palette);
}

void Piece::setCell(Cell *cell)
{
    this->cell = cell;
}

Cell *Piece::getCell()
{
    return cell;
}

void Piece::paintEvent(QPaintEvent *event)
{
    move(state.x, state.y);
}

// Возвращает nullprt, если совершен ход за доску или ход на свою фигуру. В иных случаях возвращает клетку(Если нажать на себя же, то вернет ту же клетку)
Cell* Piece::isMove(int delta_x, int delta_y, Board *board)
{
    if (cell->getX()+delta_x <= 8 && cell->getX()+delta_x >= 1 && cell->getY()+delta_y >= 1 && cell->getY()+delta_y <= 8){
        Cell *c = board->getCell(cell->getX() + delta_x, cell->getY() + delta_y);
        if (delta_x == 0 && delta_y == 0){
            return cell;
        }
        if (c->hasPiece() && c->getPiece()->getColor() == color)
            return nullptr;
        return board->getCell(cell->getX() + delta_x, cell->getY() + delta_y);
    }
    return nullptr;
}

QString Piece::getColor() const
{
    return color;
}

bool Piece::isFriend(Piece *piece)
{
    return color == piece->getColor();
}

void Piece::toCell(Cell *to)
{
    this->state.x = to->getCoordX();
    this->state.y = to->getCoordY();
    repaint();
}
